<!DOCTYPE html>
<html lang=zh>
<head>
  <meta charset="utf-8">
  
  <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
  <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, minimum-scale=1, user-scalable=no, minimal-ui">
  <meta name="renderer" content="webkit">
  <meta http-equiv="Cache-Control" content="no-transform" />
  <meta http-equiv="Cache-Control" content="no-siteapp" />
  <meta name="apple-mobile-web-app-capable" content="yes">
  <meta name="apple-mobile-web-app-status-bar-style" content="black">
  <meta name="format-detection" content="telephone=no,email=no,adress=no">
  <!-- Color theme for statusbar -->
  <meta name="theme-color" content="#000000" />
  <!-- 强制页面在当前窗口以独立页面显示,防止别人在框架里调用页面 -->
  <meta http-equiv="window-target" content="_top" />
  <!-- 谷歌收录 -->
  <meta name="google-site-verification" content="-5hl8eC4wfapGZhZouwMVUcKG0iaynijVRJbqVlzXm4" />
  
  
  <title>Linux中易混淆的概念 | 鴻塵</title>
  <meta name="description" content="文章说明文章作者：鴻塵文章说明：学习Linux shell过程中的记录，参考书籍主要有《Linux命令行与shell脚本编程大全（第3版）》，《鸟哥的Linux私房菜（第三版）》系列和《快乐的 Linux 命令行》，参考资料主要有Linux命令大全等。文章链接：https:&#x2F;&#x2F;hwame.top&#x2F;20201129&#x2F;confusing-concepts-in-linux.html  1.单引号、双">
<meta property="og:type" content="article">
<meta property="og:title" content="Linux中易混淆的概念">
<meta property="og:url" content="https://hwame.top/20201129/confusing-concepts-in-linux.html">
<meta property="og:site_name" content="鴻塵">
<meta property="og:description" content="文章说明文章作者：鴻塵文章说明：学习Linux shell过程中的记录，参考书籍主要有《Linux命令行与shell脚本编程大全（第3版）》，《鸟哥的Linux私房菜（第三版）》系列和《快乐的 Linux 命令行》，参考资料主要有Linux命令大全等。文章链接：https:&#x2F;&#x2F;hwame.top&#x2F;20201129&#x2F;confusing-concepts-in-linux.html  1.单引号、双">
<meta property="og:locale" content="zh_CN">
<meta property="article:published_time" content="2020-11-29T05:52:55.000Z">
<meta property="article:modified_time" content="2020-11-30T00:00:56.000Z">
<meta property="article:author" content="鴻塵">
<meta property="article:tag" content="Linux">
<meta property="article:tag" content="shell">
<meta name="twitter:card" content="summary">
  <!-- Canonical links -->
  <link rel="canonical" href="https://hwame.top/20201129/confusing-concepts-in-linux.html">
  
    <link rel="alternate" href="true" title="鴻塵" type="application/atom+xml">
  
  
    <link rel="icon" href="/favicon.png" type="image/x-icon">
  
  
<link rel="stylesheet" href="/css/style.css">

  
    <link href="//cdn.jsdelivr.net/npm/katex@0.9.0/dist/katex.min.css" rel="stylesheet">
  
  
  
    <link href="//cdn.jsdelivr.net/npm/@fancyapps/fancybox@latest/dist/jquery.fancybox.min.css" rel="stylesheet">
  
  
<meta name="generator" content="Hexo 5.4.2"></head>


<script src="https://cdn.jsdelivr.net/gh/bobcn/hexo_resize_image.js@master/hexo_resize_image.js"></script>
<body class="main-center theme-purple" itemscope itemtype="http://schema.org/WebPage">
  <header class="header" itemscope itemtype="http://schema.org/WPHeader">
  <div class="slimContent">
    <div class="navbar-header">
      
      
      <div class="profile-block text-center">
        <a id="avatar" href="https://hwame.top" target="_blank">
          <img class="img-circle img-rotate" src="https://cdn.jsdelivr.net/gh/hwame/pics@main/avatar.jpg" width="200" height="200">
        </a>
        <h2 id="name" class="hidden-xs hidden-sm">鴻塵</h2>
        <h3 id="title" class="hidden-xs hidden-sm hidden-md">Pythoner, Data Analyst</h3>
        <small id="location" class="text-muted hidden-xs hidden-sm"><i class="icon icon-map-marker"></i> 湖北-武汉</small>
      </div>
      
      <div class="search" id="search-form-wrap">

    <form class="search-form sidebar-form">
        <div class="input-group">
            <input type="text" class="search-form-input form-control" placeholder="搜索" />
            <span class="input-group-btn">
                <button type="submit" class="search-form-submit btn btn-flat" onclick="return false;"><i class="icon icon-search"></i></button>
            </span>
        </div>
    </form>
    <div class="ins-search">
  <div class="ins-search-mask"></div>
  <div class="ins-search-container">
    <div class="ins-input-wrapper">
      <input type="text" class="ins-search-input" placeholder="想要查找什么..." x-webkit-speech />
      <button type="button" class="close ins-close ins-selectable" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button>
    </div>
    <div class="ins-section-wrapper">
      <div class="ins-section-container"></div>
    </div>
  </div>
</div>


</div>
      <button class="navbar-toggle collapsed" type="button" data-toggle="collapse" data-target="#main-navbar" aria-controls="main-navbar" aria-expanded="false">
        <span class="sr-only">Toggle navigation</span>
        <span class="icon-bar"></span>
        <span class="icon-bar"></span>
        <span class="icon-bar"></span>
      </button>
    </div>
    <nav id="main-navbar" class="collapse navbar-collapse" itemscope itemtype="http://schema.org/SiteNavigationElement" role="navigation">
      <ul class="nav navbar-nav main-nav menu-highlight">
        
        
        <li class="menu-item menu-item-home">
          <a href="/.">
            
            <i class="icon icon-home-fill"></i>
            
            <span class="menu-title">首页</span>
          </a>
        </li>
        
        
        <li class="menu-item menu-item-archives">
          <a href="/archives">
            
            <i class="icon icon-archives-fill"></i>
            
            <span class="menu-title">归档</span>
          </a>
        </li>
        
        
        <li class="menu-item menu-item-categories">
          <a href="/categories">
            
            <i class="icon icon-folder-open"></i>
            
            <span class="menu-title">分类</span>
          </a>
        </li>
        
        
        <li class="menu-item menu-item-tags">
          <a href="/tags">
            
            <i class="icon icon-tags"></i>
            
            <span class="menu-title">标签</span>
          </a>
        </li>
        
        
        <li class="menu-item menu-item-repository">
          <a href="/repository">
            
            <i class="icon icon-project"></i>
            
            <span class="menu-title">资源</span>
          </a>
        </li>
        
        
        <li class="menu-item menu-item-gallery">
          <a href="/gallery">
            
            <i class="icon icon-delicious"></i>
            
            <span class="menu-title">相册</span>
          </a>
        </li>
        
        
        <li class="menu-item menu-item-links">
          <a href="/links">
            
            <i class="icon icon-friendship"></i>
            
            <span class="menu-title">友链</span>
          </a>
        </li>
        
        
        <li class="menu-item menu-item-about">
          <a href="/about">
            
            <i class="icon icon-cup-fill"></i>
            
            <span class="menu-title">关于</span>
          </a>
        </li>
        
      </ul>
      
	
    <ul class="social-links">
    	
        <li><a href="https://github.com/hwame" target="_blank" title="Github" data-toggle=tooltip data-placement=top><i class="icon icon-github"></i></a></li>
        
        <li><a href="https://weibo.com/hwamei" target="_blank" title="Weibo" data-toggle=tooltip data-placement=top><i class="icon icon-weibo"></i></a></li>
        
        <li><a href="https://www.zhihu.com/people/hwame" target="_blank" title="Zhihu" data-toggle=tooltip data-placement=top><i class="icon icon-zhihu"></i></a></li>
        
        <li><a href="https://segmentfault.com/u/hwame" target="_blank" title="Segmentfault" data-toggle=tooltip data-placement=top><i class="icon icon-segmentfault"></i></a></li>
        
        <li><a href="https://gitee.com/hwame" target="_blank" title="Gitee" data-toggle=tooltip data-placement=top><i class="icon icon-gitee"></i></a></li>
        
        <li><a href="/atom.xml" target="_blank" title="Rss" data-toggle=tooltip data-placement=top><i class="icon icon-rss"></i></a></li>
        
    </ul>

    </nav>
  </div>
</header>

  
    <aside class="sidebar" itemscope itemtype="http://schema.org/WPSideBar">
  <div class="slimContent">
    
      <div class="widget">
    <h3 class="widget-title"><i style="color:#9400D3" class="icon icon-stackexchange"></i>公告</h3>
    <div class="widget-body">
        <div id="board">
            <div class="content">
                <p>欢迎来到鴻塵的博客!<br>鴻塵的<u><a target="_blank" rel="noopener" href="https://weibo.com/hwamei" style="color:#E541E5;">微博</a></u>主页，鴻塵的<u><a target="_blank" rel="noopener" href="https://github.com/hwame" style="color:#E541E5;">Github</a></u>主页，如果我可以忘记的<u><a target="_blank" rel="noopener" href="https://www.zhihu.com/people/hwame" style="color:#E541E5;">知乎</a></u>主页。</p>
            </div>
        </div>
    </div>
</div>

    
      
  <div class="widget">
    <h3 class="widget-title"><i style="color:#9400D3" class="icon icon-tags"></i>标签云</h3>
    <div class="widget-body tagcloud">
      <a href="/tags/CentOS/" style="font-size: 13px; color: #fff">CentOS</a> <a href="/tags/Go/" style="font-size: 13.2px; color: #fff">Go</a> <a href="/tags/Hexo/" style="font-size: 13.8px; color: #fff">Hexo</a> <a href="/tags/Linux/" style="font-size: 14px; color: #fff">Linux</a> <a href="/tags/Linux%E9%83%A8%E7%BD%B2/" style="font-size: 13px; color: #fff">Linux部署</a> <a href="/tags/MongoDB/" style="font-size: 13.4px; color: #fff">MongoDB</a> <a href="/tags/Spark/" style="font-size: 13px; color: #fff">Spark</a> <a href="/tags/matplotlib/" style="font-size: 13.2px; color: #fff">matplotlib</a> <a href="/tags/miscellanea/" style="font-size: 13.6px; color: #fff">miscellanea</a> <a href="/tags/python/" style="font-size: 14px; color: #fff">python</a> <a href="/tags/shell/" style="font-size: 13.6px; color: #fff">shell</a> <a href="/tags/%E5%A4%A7%E6%95%B0%E6%8D%AE/" style="font-size: 13px; color: #fff">大数据</a> <a href="/tags/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84%E4%B8%8E%E7%AE%97%E6%B3%95/" style="font-size: 13px; color: #fff">数据结构与算法</a> <a href="/tags/%E7%88%AC%E8%99%AB/" style="font-size: 13px; color: #fff">爬虫</a>
    </div>
  </div>

<script type="text/javascript">
    var everytag=document.getElementsByClassName("widget-body tagcloud")[0].children;
    for (var i = everytag.length - 1; i >= 0; i--) {
    	var r=Math.floor(Math.random()*255);
        var g=Math.floor(Math.random()*255);
        var b=Math.floor(Math.random()*255);
        everytag[i].style.background = "rgb("+r+","+g+","+b+")";
    }
</script>
    
      
  <div class="widget">
    <h3 class="widget-title"><i style="color:#9400D3" class="icon icon-folder-open"></i>分类</h3>
    <div class="widget-body">
      <ul class="category-list"><li class="category-list-item"><a class="category-list-link" href="/categories/Go/">Go</a><span class="category-list-count">2</span></li><li class="category-list-item"><a class="category-list-link" href="/categories/Hexo/">Hexo</a><span class="category-list-count">5</span></li><li class="category-list-item"><a class="category-list-link" href="/categories/Linux/">Linux</a><span class="category-list-count">8</span></li><li class="category-list-item"><a class="category-list-link" href="/categories/MongoDB/">MongoDB</a><span class="category-list-count">3</span></li><li class="category-list-item"><a class="category-list-link" href="/categories/miscellanea/">miscellanea</a><span class="category-list-count">4</span></li><li class="category-list-item"><a class="category-list-link" href="/categories/python/">python</a><span class="category-list-count">7</span></li><li class="category-list-item"><a class="category-list-link" href="/categories/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84%E4%B8%8E%E7%AE%97%E6%B3%95/">数据结构与算法</a><span class="category-list-count">1</span></li></ul>
    </div>
  </div>


    
      
  <div class="widget">
    <h3 class="widget-title"><i style="color:#9400D3" class="icon icon-archives-fill"></i>归档</h3>
    <div class="widget-body">
      <ul class="archive-list"><li class="archive-list-item"><a class="archive-list-link" href="/archives/2022/">2022</a><span class="archive-list-count">4</span></li><li class="archive-list-item"><a class="archive-list-link" href="/archives/2021/">2021</a><span class="archive-list-count">9</span></li><li class="archive-list-item"><a class="archive-list-link" href="/archives/2020/">2020</a><span class="archive-list-count">17</span></li></ul>
    </div>
  </div>


    
      
  <div class="widget">
    <h3 class="widget-title"><i style="color:#9400D3" class="icon icon-shu-fill"></i>最新文章</h3>
    <div class="widget-body">
      <ul class="recent-post-list list-unstyled ">
        
          <li>
            
            <div class="item-thumb">
              <a href="/20220327/channel-and-goroutine-in-go.html" class="thumb">
    
    
        <span style="background-image:url(https://cdn.jsdelivr.net/gh/hwame/pics@main/post-pics/icon-golang.jpeg)" alt="Go语言中的通道" class="thumb-image"></span>
    
</a>

            </div>
            
            <div class="item-inner">
              <p class="item-category">
                <a class="category-link" href="/categories/Go/">Go</a>
              </p>
              <p class="item-title">
                <a href="/20220327/channel-and-goroutine-in-go.html" class="title">Go语言中的通道</a>
              </p>
              <p class="item-date">
                <time datetime="2022-03-27T11:06:16.000Z" itemprop="datePublished">2022-03-27</time>
              </p>
            </div>
          </li>
          
          <li>
            
            <div class="item-thumb">
              <a href="/20220323/when-to-use-pointer-in-go.html" class="thumb">
    
    
        <span style="background-image:url(https://cdn.jsdelivr.net/gh/hwame/pics@main/post-pics/icon-golang.jpeg)" alt="Go语言什么时候使用指针" class="thumb-image"></span>
    
</a>

            </div>
            
            <div class="item-inner">
              <p class="item-category">
                <a class="category-link" href="/categories/Go/">Go</a>
              </p>
              <p class="item-title">
                <a href="/20220323/when-to-use-pointer-in-go.html" class="title">Go语言什么时候使用指针</a>
              </p>
              <p class="item-date">
                <time datetime="2022-03-23T12:49:57.000Z" itemprop="datePublished">2022-03-23</time>
              </p>
            </div>
          </li>
          
          <li>
            
            <div class="item-thumb">
              <a href="/20220228/awesome-images-in-markdown.html" class="thumb">
    
    
        <span style="background-image:url(https://cdn.jsdelivr.net/gh/hwame/pics@main/avatar.jpg)" alt="Markdown中图片的高级用法" class="thumb-image"></span>
    
</a>

            </div>
            
            <div class="item-inner">
              <p class="item-category">
                <a class="category-link" href="/categories/miscellanea/">miscellanea</a>
              </p>
              <p class="item-title">
                <a href="/20220228/awesome-images-in-markdown.html" class="title">Markdown中图片的高级用法</a>
              </p>
              <p class="item-date">
                <time datetime="2022-02-28T15:27:50.000Z" itemprop="datePublished">2022-02-28</time>
              </p>
            </div>
          </li>
          
          <li>
            
            <div class="item-thumb">
              <a href="/20220116/shell-regular-expression.html" class="thumb">
    
    
        <span style="background-image:url(https://cdn.jsdelivr.net/gh/hwame/pics@main/post-pics/linux-icon.png)" alt="Shell正则表达式" class="thumb-image"></span>
    
</a>

            </div>
            
            <div class="item-inner">
              <p class="item-category">
                <a class="category-link" href="/categories/Linux/">Linux</a>
              </p>
              <p class="item-title">
                <a href="/20220116/shell-regular-expression.html" class="title">Shell正则表达式</a>
              </p>
              <p class="item-date">
                <time datetime="2022-01-16T14:13:05.000Z" itemprop="datePublished">2022-01-16</time>
              </p>
            </div>
          </li>
          
          <li>
            
            <div class="item-thumb">
              <a href="/20211009/install-linux-on-android-phone.html" class="thumb">
    
    
        <span style="background-image:url(https://cdn.jsdelivr.net/gh/hwame/pics@main/avatar.jpg)" alt="如何在安卓手机上安装Linux发行版" class="thumb-image"></span>
    
</a>

            </div>
            
            <div class="item-inner">
              <p class="item-category">
                <a class="category-link" href="/categories/miscellanea/">miscellanea</a>
              </p>
              <p class="item-title">
                <a href="/20211009/install-linux-on-android-phone.html" class="title">如何在安卓手机上安装Linux发行版</a>
              </p>
              <p class="item-date">
                <time datetime="2021-10-09T15:16:37.000Z" itemprop="datePublished">2021-10-09</time>
              </p>
            </div>
          </li>
          
      </ul>
    </div>
  </div>
  

    
  </div>
</aside>

  
  
<aside class="sidebar sidebar-toc collapse" id="collapseToc" itemscope itemtype="http://schema.org/WPSideBar">
  <div class="slimContent">
    <nav id="toc" class="article-toc">
      <h3 class="toc-title">文章目录</h3>
      <ol class="toc"><li class="toc-item toc-level-2"><a class="toc-link" href="#1-%E5%8D%95%E5%BC%95%E5%8F%B7%E3%80%81%E5%8F%8C%E5%BC%95%E5%8F%B7%E5%92%8C%E5%8F%8D%E5%BC%95%E5%8F%B7"><span class="toc-number">1.</span> <span class="toc-text">1.单引号、双引号和反引号</span></a></li><li class="toc-item toc-level-2"><a class="toc-link" href="#2-%E5%90%84%E7%A7%8D%E6%8B%AC%E5%8F%B7%E7%9A%84%E4%BD%9C%E7%94%A8"><span class="toc-number">2.</span> <span class="toc-text">2.各种括号的作用</span></a><ol class="toc-child"><li class="toc-item toc-level-3"><a class="toc-link" href="#2-1-%E5%B0%8F%E6%8B%AC%E5%8F%B7-%E5%9C%86%E6%8B%AC%E5%8F%B7"><span class="toc-number">2.1.</span> <span class="toc-text">2.1.小括号&#x2F;圆括号</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#2-2-%E4%B8%AD%E6%8B%AC%E5%8F%B7-%E6%96%B9%E6%8B%AC%E5%8F%B7"><span class="toc-number">2.2.</span> <span class="toc-text">2.2.中括号&#x2F;方括号</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#2-3-%E5%A4%A7%E6%8B%AC%E5%8F%B7-%E8%8A%B1%E6%8B%AC%E5%8F%B7"><span class="toc-number">2.3.</span> <span class="toc-text">2.3.大括号&#x2F;花括号</span></a><ol class="toc-child"><li class="toc-item toc-level-4"><a class="toc-link" href="#%E2%91%B4%E5%B8%B8%E8%A7%84%E7%94%A8%E6%B3%95"><span class="toc-number">2.3.1.</span> <span class="toc-text">⑴常规用法</span></a></li><li class="toc-item toc-level-4"><a class="toc-link" href="#%E2%91%B5%E5%87%A0%E7%A7%8D%E7%89%B9%E6%AE%8A%E7%9A%84%E6%9B%BF%E6%8D%A2%E7%BB%93%E6%9E%84"><span class="toc-number">2.3.2.</span> <span class="toc-text">⑵几种特殊的替换结构</span></a></li><li class="toc-item toc-level-4"><a class="toc-link" href="#%E2%91%B6%E5%9B%9B%E7%A7%8D%E6%A8%A1%E5%BC%8F%E5%8C%B9%E9%85%8D%E6%9B%BF%E6%8D%A2%E7%BB%93%E6%9E%84"><span class="toc-number">2.3.3.</span> <span class="toc-text">⑶四种模式匹配替换结构</span></a></li><li class="toc-item toc-level-4"><a class="toc-link" href="#%E2%91%B7%E5%AD%97%E7%AC%A6%E4%B8%B2%E6%8F%90%E5%8F%96%E5%92%8C%E6%9B%BF%E6%8D%A2"><span class="toc-number">2.3.4.</span> <span class="toc-text">⑷字符串提取和替换</span></a></li></ol></li><li class="toc-item toc-level-3"><a class="toc-link" href="#2-4-%E7%AC%A6%E5%8F%B7-%E5%90%8E%E7%9A%84%E6%8B%AC%E5%8F%B7"><span class="toc-number">2.4.</span> <span class="toc-text">2.4.符号$后的括号</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#2-5-%E4%BD%BF%E7%94%A8%E6%8B%AC%E5%8F%B7%E5%B0%86%E5%A4%9A%E6%9D%A1%E5%91%BD%E4%BB%A4%E6%89%A7%E8%A1%8C"><span class="toc-number">2.5.</span> <span class="toc-text">2.5.使用括号将多条命令执行</span></a></li></ol></li><li class="toc-item toc-level-2"><a class="toc-link" href="#3-%E9%87%8D%E5%AE%9A%E5%90%91%E5%92%8C%E7%AE%A1%E9%81%93"><span class="toc-number">3.</span> <span class="toc-text">3.重定向和管道</span></a></li><li class="toc-item toc-level-2"><a class="toc-link" href="#4-%E9%80%80%E5%87%BA%E7%8A%B6%E6%80%81%E7%A0%81"><span class="toc-number">4.</span> <span class="toc-text">4.退出状态码</span></a></li><li class="toc-item toc-level-2"><a class="toc-link" href="#5-%E5%BE%85%E7%BB%AD"><span class="toc-number">5.</span> <span class="toc-text">5.待续</span></a></li></ol>
    </nav>
  </div>
</aside>

<main class="main" role="main">
  <div class="content">
  <article id="post-confusing-concepts-in-linux" class="article article-type-post" itemscope itemtype="http://schema.org/BlogPosting">
    
    <div class="article-header">
      
        
  
    <h1 class="article-title" itemprop="name">
      Linux中易混淆的概念
    </h1>
  

      
      <div class="article-meta">
        <span class="article-date">
    <i class="icon icon-calendar"></i>
	<a href="/20201129/confusing-concepts-in-linux.html" class="article-date">
	  发布于 <time datetime="2020-11-29T05:52:55.000Z" itemprop="datePublished">2020-11-29</time>
	</a>
</span>
<span class="article-date">
    <i class="icon icon-calendar-check"></i>
	<a href="/20201129/confusing-concepts-in-linux.html" class="article-date">
	  更新于 <time datetime="2020-11-30T00:00:56.000Z" itemprop="dateUpdated">2020-11-30</time>
	</a>
</span>
        
  <span class="article-category">
    <i class="icon icon-folder"></i>
    <a class="article-category-link" href="/categories/Linux/">Linux</a>
  </span>

        
  <span class="article-tag">
    <i class="icon icon-tags"></i>
	<a class="article-tag-link-link" href="/tags/Linux/" rel="tag">Linux</a>, <a class="article-tag-link-link" href="/tags/shell/" rel="tag">shell</a>
  </span>


        

	<span class="article-read hidden-xs">
    	<i class="icon icon-eye-fill" aria-hidden="true"></i>
    	<span id="/20201129/confusing-concepts-in-linux.html" class="leancloud_visitors"  data-flag-title="Linux中易混淆的概念">
			<span class="leancloud-visitors-count">0</span>
		</span>
    </span>

        <span class="post-comment"><i class="icon icon-comment"></i> <a href="/20201129/confusing-concepts-in-linux.html#comments" class="article-comment-link">评论</a></span>
        
	
		<span class="post-wordcount hidden-xs" itemprop="wordCount">字数统计: 3.6k(字)</span>
	
	
		<span class="post-readcount hidden-xs" itemprop="timeRequired">阅读时长: 13(分)</span>
	

      </div>
      <div style="background-color:#D7BDE2;border:1px solid #D7BDE2;border-radius:10px;padding:5px">
          <b>温馨提示</b>：点击页面下方<i style="color:red" class="icon icon-anchor"></i>以展开或折叠目录
      </div>
    </div>
    <div class="article-entry marked-body" itemprop="articleBody">
      
        <blockquote>
<p><font size=5><b>文章说明</b></font><br><strong>文章作者：</strong><a href="https://hwame.top">鴻塵</a><br><strong>文章说明：</strong>学习<code>Linux</code> <code>shell</code>过程中的记录，参考书籍主要有《Linux命令行与shell脚本编程大全（第3版）》，《鸟哥的Linux私房菜（第三版）》系列和《快乐的 Linux 命令行》，参考资料主要有<a target="_blank" rel="noopener" href="https://man.linuxde.net/">Linux命令大全</a>等。<br><strong>文章链接：</strong><a href="https://hwame.top/20201129/confusing-concepts-in-linux.html">https://hwame.top/20201129/confusing-concepts-in-linux.html</a></p>
</blockquote>
<h2 id="1-单引号、双引号和反引号"><a href="#1-单引号、双引号和反引号" class="headerlink" title="1.单引号、双引号和反引号"></a>1.单引号、双引号和反引号</h2><p><strong>①</strong><code>echo</code>命令可用单引号或双引号来划定文本字符串。如果在字符串中用到了它们，你需要在文本中使用其中一种引号，而用另外一种来将字符串划定起来。</p>
<ul>
<li>单引号字符串的限制：<ul>
<li>单引号里的任何字符都会原样输出，单引号字符串中的变量是无效的；</li>
<li>单引号字串中不能出现单独一个的单引号（对单引号使用转义符后也不行），但可成对出现，作为字符串拼接使用。</li>
</ul>
</li>
<li>双引号的优点：<ul>
<li>双引号里可以有变量</li>
<li>双引号里可以出现转义字符</li>
</ul>
</li>
</ul>
<p><strong>②</strong>反引号<code>ˋ</code>用于从命令输出中提取信息，将命令输出赋给变量，另一种格式是<code>$()</code>，例如：</p>
<p><strong>注意：</strong>赋值等号和命令替换字符之间没有空格。<br><figure class="highlight ini"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">testing</span>=`date`</span><br><span class="line"><span class="attr">testing</span>=$(date)</span><br></pre></td></tr></table></figure></p>
<h2 id="2-各种括号的作用"><a href="#2-各种括号的作用" class="headerlink" title="2.各种括号的作用"></a>2.各种括号的作用</h2><blockquote>
<p>本部分<a href="#2-%E5%90%84%E7%A7%8D%E6%8B%AC%E5%8F%B7%E7%9A%84%E4%BD%9C%E7%94%A8">各种括号的作用</a>内容参考：<a target="_blank" rel="noopener" href="https://blog.csdn.net/taiyang1987912/article/details/39551385">shell中各种括号的作用()、(())、[]、[[]]、{}</a></p>
</blockquote>
<h3 id="2-1-小括号-圆括号"><a href="#2-1-小括号-圆括号" class="headerlink" title="2.1.小括号/圆括号"></a>2.1.小括号/圆括号</h3><ul>
<li>单小括号<code>()</code><ul>
<li>①<strong>命令组</strong>。括号中的命令将会新开一个子shell顺序执行，所以括号中的变量不能够被脚本余下的部分使用。括号中多个命令之间用分号隔开，最后一个命令可以没有分号，各命令和括号之间不必有空格。</li>
<li>②<strong>命令替换</strong>。等同于<code>cmd</code>，shell扫描一遍命令行，发现了<code>$( cmd )</code>结构，便将<code>$( cmd )</code>中的<code>cmd</code>执行一次，得到其标准输出，再将此输出放到原来命令。有些shell不支持，如tcsh。</li>
<li>③<strong>初始化数组</strong>。如：<code>array=(a b c d)</code>。</li>
</ul>
</li>
<li>双小括号<code>(( ))</code><ul>
<li>①<strong>整数扩展</strong>。这种扩展计算是整数型的计算，不支持浮点型。<code>((exp))</code>结构扩展并计算一个算术表达式的值，如果表达式的结果为<code>0</code>，那么返回的退出状态码为<code>1</code>（或者是「假」），而一个非零值的表达式所返回的退出状态码将为<code>0</code>（或者是「真」）。若是逻辑判断，表达式<code>exp</code>为真则为<code>1</code>，假则为<code>0</code>。</li>
<li>②<strong>C语言运算规则</strong>。只要括号中的运算符、表达式符合C语言运算规则，都可用在<code>$(( exp ))</code>中，甚至是三目运算符。作不同进位(如二进制、八进制、十六进制)运算时，输出结果全都自动转化成了十进制。如：<code>echo $(( 16#5f ))</code>结果为<code>95</code>(16进位转十进制)。</li>
<li>③单纯用 (( )) 也可<strong>重定义变量值</strong>，比如<code>a=5; (( a++ ))</code>可将<code>$a</code>重定义为<code>6</code>。</li>
<li>④常用于<strong>算术运算比较</strong>，双括号中的变量可以不使用<code>$</code>符号前缀。括号内支持多个表达式用逗号分开。 只要括号中的表达式符合C语言运算规则，比如可以直接使用<code>for (( i = 0; i &lt; 5; i++ ))</code>，如果不使用双括号，则为<code>for i in ˋseq 0 4ˋ</code>或者<code>for i in &#123;0..4&#125;</code>。再如可以直接使用<code>if (($i&lt;5))</code>，如果不使用双括号，则为<code>if [ $i -lt 5 ]</code>。</li>
</ul>
</li>
</ul>
<h3 id="2-2-中括号-方括号"><a href="#2-2-中括号-方括号" class="headerlink" title="2.2.中括号/方括号"></a>2.2.中括号/方括号</h3><ul>
<li>单中括号<code>[]</code><ul>
<li>①bash的<strong>内部命令</strong>，<code>[</code>和<code>test</code>是等同的。如果我们不用绝对路径指明，通常我们用的都是bash自带的命令。<code>if/test</code>结构中的左中括号是调用<code>test</code>的命令标识，右中括号是关闭条件判断的。这个命令把它的参数作为<strong>比较表达式</strong>或者作为<strong>文件测试</strong>，并且根据比较的结果来返回一个退出状态码。<code>if/test</code>结构中并不是必须右中括号，但是新版的Bash中要求必须这样。</li>
<li>②<code>test</code>和<code>[]</code>中可用的比较运算符只有<code>==</code>和<code>!=</code>，两者都是用于字符串比较的，不可用于整数比较，整数比较只能使用<code>-eq</code>、<code>-gt</code>这种形式。无论是字符串比较还是整数比较都不支持大于号小于号。如果实在想用，对于字符串比较可以使用转义形式，例如：<code>[ ab \&lt; bc ]</code>，结果为真，也就是返回状态为<code>0</code>。<code>[ ]</code>中的逻辑与和逻辑或使用<code>-a</code>和<code>-o</code>表示。</li>
<li>③<strong>字符范围</strong>。用作正则表达式的一部分，描述一个匹配的字符范围，作为<code>test</code>用途的中括号内不能使用正则。</li>
<li>④在一个<code>array</code>结构的上下文中，中括号用来<strong>引用数组中每个元素的编号</strong>。</li>
</ul>
</li>
<li>双中括号<code>[[ ]]</code><ul>
<li>①<code>[[</code>是bash程序语言的<strong>关键字</strong>，并不是一个命令，<code>[[ ]]</code>结构比<code>[ ]</code>结构更加通用。在<code>[[</code>和<code>]]</code>之间所有的字符都不会发生文件名扩展或者单词分割，但是会发生参数扩展和命令替换。</li>
<li>②支持字符串的<strong>模式匹配</strong>，使用<code>=~</code>操作符时甚至支持shell的正则表达式。字符串比较时可以把右边的作为一个模式，而不仅仅是一个字符串，比如<code>[[ hello == hell? ]]</code>，结果为真。<code>[[ ]]</code>中匹配字符串或通配符，不需要引号。</li>
<li>③使用<code>[[ ... ]]</code>条件判断结构而非<code>[ ... ]</code>，能够防止脚本中的许多逻辑错误。比如，<code>&amp;&amp;</code>、<code>||</code>、<code>&lt;</code>和<code>&gt;</code>操作符能够正常存在于<code>[[ ]]</code>条件判断结构中，但是如果出现在<code>[ ]</code>结构中的话会报错。比如可以直接使用<code>if [[ $a != 1 &amp;&amp; $a != 2 ]]</code>，如果不使用双括号则为<code>if [ $a -ne 1] &amp;&amp; [ $a != 2 ]</code>或者<code>if [ $a -ne 1 -a $a != 2 ]</code>。</li>
<li>④bash把双中括号中的表达式看作一个单独的元素，并返回一个退出状态码。</li>
</ul>
</li>
</ul>
<h3 id="2-3-大括号-花括号"><a href="#2-3-大括号-花括号" class="headerlink" title="2.3.大括号/花括号"></a>2.3.大括号/花括号</h3><h4 id="⑴常规用法"><a href="#⑴常规用法" class="headerlink" title="⑴常规用法"></a>⑴常规用法</h4><ul>
<li><strong>大括号拓展</strong>。通配（globbing）将对大括号中的文件名做扩展。在大括号中，不允许有空白，除非这个空白被引用或转义。<ul>
<li>第一种：对大括号中的以逗号分割的文件列表进行拓展。如<code>touch &#123;a,b&#125;.txt</code>结果为<code>a.txt b.txt</code>。</li>
<li>第二种：对大括号中以点点<code>..</code>分割的顺序文件列表起拓展作用，如：<code>touch &#123;a..d&#125;.txt</code>结果为<code>a.txt b.txt c.txt d.txt</code>。</li>
<li><strong>注：</strong>在参考文章关于<a target="_blank" rel="noopener" href="https://blog.csdn.net/taiyang1987912/article/details/39551385#t6">大括号拓展</a>举例中，<code>ls &#123;ex[1-3],ex4&#125;.sh</code>可以扩展，但<code>touch &#123;ex[1-3],ex4&#125;.sh</code>只创建了两个文件。</li>
</ul>
</li>
<li><strong>代码块</strong>，又被称为内部组，这个结构事实上创建了一个匿名函数。与小括号中的命令不同，<strong>大括号内的命令不会新开一个子shell运行</strong>，即脚本余下部分仍可使用括号内变量。括号内的命令间用分号隔开，最后一个也必须有分号。<code>&#123;&#125;</code>的第一个命令和左括号之间必须要有一个空格。</li>
</ul>
<h4 id="⑵几种特殊的替换结构"><a href="#⑵几种特殊的替换结构" class="headerlink" title="⑵几种特殊的替换结构"></a>⑵几种特殊的替换结构</h4><ul>
<li>①<code>$&#123;var:-string&#125;</code>：若变量<code>var</code>为空，则用在命令行中用<code>string</code>来替换<code>$&#123;var:-string&#125;</code>；变量<code>var</code>不为空时，则用变量<code>var</code>的值来替换<code>$&#123;var:-string&#125;</code>。</li>
<li>②<code>$&#123;var:=string&#125;</code>：替换规则和①相同，所不同之处是<code>$&#123;var:=string&#125;</code>若<code>var</code>为空时，用<code>string</code>替换<code>$&#123;var:=string&#125;</code>的同时还把<code>string</code>赋给变量<code>var</code>。<code>$&#123;var:=string&#125;</code>很常用的一种用法是，判断某个变量是否赋值，没有的话则给它赋上一个默认值。</li>
<li>②<code>$&#123;var:+string&#125;</code>的替换规则和上面①②相反，即只有当<code>var</code>不是空的时候才替换成<code>string</code>，若<code>var</code>为空时则不替换或者说是替换成变量<code>var</code>即空值。</li>
<li>③<code>$&#123;var:?string&#125;</code>替换规则为：若变量<code>var</code>不为空，则用变量<code>var</code>的值来替换<code>$&#123;var:?string&#125;</code>；若变量<code>var</code>为空，则把<code>string</code>输出到标准错误中，并从脚本中退出。我们可利用此特性来检查是否设置了变量的值。</li>
</ul>
<p>补充扩展：在上面的替换结构中<code>string</code>不一定是常值的，可用另外一个变量的值或是一种命令的输出。</p>
<h4 id="⑶四种模式匹配替换结构"><a href="#⑶四种模式匹配替换结构" class="headerlink" title="⑶四种模式匹配替换结构"></a>⑶四种模式匹配替换结构</h4><blockquote>
<p>模式匹配记忆方法：</p>
<ul>
<li><code>#</code>是去掉左边(在键盘上#在$之左边)</li>
<li><code>%</code>是去掉右边(在键盘上%在$之右边)</li>
<li><code>#</code>和<code>%</code>中的单一符号是最小匹配，两个相同符号是最大匹配</li>
</ul>
</blockquote>
<ul>
<li>第一种模式：<code>$&#123;variable%pattern&#125;</code>。shell在<code>variable</code>中查找，看它是否以给的模式<code>pattern</code>结尾，如果是，就从命令行把<code>variable</code>中的内容去掉<strong>右边最短</strong>的匹配模式；</li>
<li>第二种模式：<code>$&#123;variable%%pattern&#125;</code>。shell在<code>variable</code>中查找，看它是否以给的模式<code>pattern</code>结尾，如果是，就从命令行把<code>variable</code>中的内容去掉<strong>右边最长</strong>的匹配模式；</li>
<li>第三种模式：<code>$&#123;variable#pattern&#125;</code>。shell在<code>variable</code>中查找，看它是否以给的模式<code>pattern</code>开始，如果是，就从命令行把<code>variable</code>中的内容去掉<strong>左边最短</strong>的匹配模式；</li>
<li>第四种模式：<code>$&#123;variable##pattern&#125;</code>。shell在<code>variable</code>中查找，看它是否以给的模式<code>pattern</code>结尾，如果是，就从命令行把<code>variable</code>中的内容去掉<strong>左边最长</strong>的匹配模式。</li>
</ul>
<p>这四种模式中都不会改变<code>variable</code>的值，其中，只有在<code>pattern</code>中使用了<code>*</code>匹配符号时，<code>%</code>和<code>%%</code>、<code>#</code>和<code>##</code>才有区别。结构中的<code>pattern</code>支持通配符，<code>*</code>表示零个或多个任意字符，<code>?</code>表示仅与一个任意字符匹配，<code>[...]</code>表示匹配中括号里面的字符，<code>[!...]</code>表示不匹配中括号里面的字符 。</p>
<h4 id="⑷字符串提取和替换"><a href="#⑷字符串提取和替换" class="headerlink" title="⑷字符串提取和替换"></a>⑷字符串提取和替换</h4><ul>
<li>第一种模式：<code>$&#123;var:num&#125;</code>。shell在<code>var</code>中提取第<code>num</code>个字符到末尾的所有字符。若<code>num</code>为正数，从左边<code>0</code>处开始；若<code>num</code>为负数，从右边开始提取字串，但必须<strong>在冒号后面加空格或一个数字或整个<code>num</code>加上括号</strong>，如<code>$&#123;var: -2&#125;</code>、<code>$&#123;var:1-3&#125;</code>或<code>$&#123;var:(-2)&#125;</code>。</li>
<li>第二种模式：<code>$&#123;var:num1:num2&#125;</code>。<code>num1</code>是位置，<code>num2</code>是长度。表示从<code>$var</code>字符串的第<code>$num1</code>个位置开始提取长度为<code>$num2</code>的子串。不能为负数。</li>
<li>第三种模式：<code>$&#123;var/pattern/pattern&#125;</code>。将<code>var</code>字符串的<strong>第一个匹配</strong>的<code>pattern</code>替换为另一个<code>pattern</code>。</li>
<li>第四种模式：<code>$&#123;var//pattern/pattern&#125;</code>。将<code>var</code>字符串中的<strong>所有能匹配</strong>的<code>pattern</code>替换为另一个<code>pattern</code>。</li>
</ul>
<h3 id="2-4-符号-后的括号"><a href="#2-4-符号-后的括号" class="headerlink" title="2.4.符号$后的括号"></a>2.4.符号<code>$</code>后的括号</h3><ul>
<li>（1）<code>$&#123;a&#125;</code>：变量<code>a</code>的值，在不引起歧义的情况下可以省略大括号。</li>
<li>（2）<code>$(cmd)</code>：命令替换，和<code>cmd</code>效果相同，结果为<code>cmd</code>命令的输出，不过某些Shell版本不支持<code>$()</code>形式的命令替换，如tcsh。</li>
<li>（3）<code>$((expression))</code>：效果和<code>expr expression</code>相同，计算数学表达式<code>expression</code>的数值，其中<code>expression</code>只要符合C语言的运算规则即可，甚至三目运算符和逻辑表达式都可以计算。</li>
</ul>
<h3 id="2-5-使用括号将多条命令执行"><a href="#2-5-使用括号将多条命令执行" class="headerlink" title="2.5.使用括号将多条命令执行"></a>2.5.使用括号将多条命令执行</h3><ul>
<li>（1）单小括号：<code>(cmd1; cmd2; cmd3)</code>。新开一个子shell顺序执行命令<code>cmd1, cmd2, cmd3</code>，各命令之间用分号隔开，最后一个命令后可以没有分号。</li>
<li>（2）单大括号：<code>&#123; cmd1; cmd2; cmd3;&#125;</code>。在当前shell顺序执行命令<code>cmd1, cmd2, cmd3</code>，各命令之间用分号隔开，最后一个命令后必须有分号，第一条命令和左括号之间必须用空格隔开。</li>
</ul>
<p><strong>注意：</strong>对<code>&#123;&#125;</code>和<code>()</code>而言，括号中的重定向符只影响该条命令， 而括号外的重定向符影响到括号中的所有命令。</p>
<h2 id="3-重定向和管道"><a href="#3-重定向和管道" class="headerlink" title="3.重定向和管道"></a>3.重定向和管道</h2><ul>
<li>输出重定向（<code>&gt;</code>）：将命令的输出发送到一个文件中，其中单大于号（<code>&gt;</code>）会覆盖文件内容，双大于号（<code>&gt;&gt;</code>）用以向文件追加数据。</li>
<li>输入重定向（<code>&lt;</code>）：将文件的内容重定向到命令，与输出重定向正好相反。</li>
<li>内联输入重定向（<code>&lt;&lt;</code>）：输入重定向的另一种方法，这种方法无需使用文件进行重定向，只需要在命令行中指定用于输入重定向的数据就可以了。必须指定一个文本标记来划分输入数据的开始和结尾。任何字符串都可作为文本标记，但在数据的开始和结尾文本标记必须一致。<blockquote>
<p><strong>记忆方法：</strong>在命令行上，命令总是在左侧，而重定向符号「指向」数据流动的方向。小于号说明数据正在从输入文件流向命令。</p>
</blockquote>
</li>
<li>管道（<code>|</code>）：将一个命令的输出作为另一个命令的输入（虽然可以用重定向来实现，但是有些笨拙）。<blockquote>
<p><strong>注意：</strong></p>
<ul>
<li><strong>①</strong>不要以为由管道串起的两个命令会依次执行。 Linux系统实际上会同时运行这两个命令，在系统内部将它们连接起来。在第一个命令产生输出的同时，输出会被立即送给第二个命令。数据传输不会用到任何中间文件或缓冲区。</li>
<li><strong>②</strong>可以在一条命令中使用任意多条管道。</li>
</ul>
</blockquote>
</li>
</ul>
<h2 id="4-退出状态码"><a href="#4-退出状态码" class="headerlink" title="4.退出状态码"></a>4.退出状态码</h2><p>shell中运行的每个命令都使用退出状态码（exit status）告诉shell它已经运行完毕。</p>
<p>按照惯例，<strong>一个成功结束的命令的退出状态码是0</strong>。如果一个命令结束时有错误，退出状态码就是一个正数值。</p>
<p>退出状态码是一个<code>0～255</code>的整数值，在命令结束运行时由命令传给shell，可以使用变量<code>$?</code>捕获这个值（上个已执行命令的退出状态码）并在脚本中使用。<br>自定义退出状态码（<code>exit n</code>）时，若<code>n</code>超出<code>0~255</code>区间则对<code>256</code>取余。</p>
<div class="table-container">
<table>
<thead>
<tr>
<th style="text-align:center">状态码</th>
<th style="text-align:left">描述</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:center"><code>0</code></td>
<td style="text-align:left">命令成功结束</td>
</tr>
<tr>
<td style="text-align:center"><code>1</code></td>
<td style="text-align:left">一般性未知错误</td>
</tr>
<tr>
<td style="text-align:center"><code>2</code></td>
<td style="text-align:left">不适合的shell命令</td>
</tr>
<tr>
<td style="text-align:center"><code>126</code></td>
<td style="text-align:left">命令不可执行</td>
</tr>
<tr>
<td style="text-align:center"><code>127</code></td>
<td style="text-align:left">没找到命令</td>
</tr>
<tr>
<td style="text-align:center"><code>128</code></td>
<td style="text-align:left">无效的退出参数</td>
</tr>
<tr>
<td style="text-align:center"><code>128+x</code></td>
<td style="text-align:left">与Linux信号<code>x</code>相关的严重错误</td>
</tr>
<tr>
<td style="text-align:center"><code>130</code></td>
<td style="text-align:left">通过<code>Ctrl+C</code>终止的命令</td>
</tr>
<tr>
<td style="text-align:center"><code>255</code></td>
<td style="text-align:left">正常范围之外的退出状态码</td>
</tr>
</tbody>
</table>
</div>
<h2 id="5-待续"><a href="#5-待续" class="headerlink" title="5.待续"></a>5.待续</h2>
      
    </div>
    <div class="article-footer">
      <blockquote class="mt-2x">
  <ul class="post-copyright list-unstyled">
    <li class="post-copyright-license">
      <strong>文章作者： </strong><a href="https://hwame.top" style="color:#E541E5;"> 鴻塵</a>
    </li>
    
    <li class="post-copyright-link hidden-xs">
      <strong>本文链接：</strong>
      <a href="https://hwame.top/20201129/confusing-concepts-in-linux.html" title="Linux中易混淆的概念" target="_blank" rel="external" style="color:#E541E5;">https://hwame.top/20201129/confusing-concepts-in-linux.html</a>
    </li>
    
    <li class="post-copyright-license">
      <strong>版权声明： </strong> 本博客所有文章除特别声明外，均采用《<a href="http://creativecommons.org/licenses/by/4.0/deed.zh" target="_blank" rel="external" style="color:#E541E5;"><u>CC BY 4.0 CN协议</u></a>》许可协议。转载请注明出处！
    </li>
  </ul>
</blockquote>


<div class="panel panel-default panel-badger">
  <div class="panel-body">
    <figure class="media">
      <div class="media-left">
        <a href="https://hwame.top" target="_blank" class="img-burn thumb-sm visible-lg">
          <img src="https://cdn.jsdelivr.net/gh/hwame/pics@main/avatar.jpg" class="img-rounded w-full" alt="">
        </a>
      </div>
      <div class="media-body">
        <h3 class="media-heading"><a href="https://hwame.top" target="_blank"><span class="text-dark">鴻塵</span><small class="ml-1x">Pythoner, Data Analyst</small></a></h3>
        <div>个人简介：处女座不适合做码农。</div>
      </div>
    </figure>
  </div>
</div>


    </div>
  </article>
  
    
  <section id="comments">
  	
      <div id="vcomments"></div>
    
  </section>


  
</div>

  <nav class="bar bar-footer clearfix" data-stick-bottom>
  <div class="bar-inner">
  
  <ul class="pager pull-left">
    
    <li class="prev">
      <a href="/20210112/command-line-description.html" title="命令行帮助文档语法格式详解"><i class="icon icon-angle-left" aria-hidden="true"></i><span>&nbsp;&nbsp;上一篇</span></a>
    </li>
    
    
    <li class="next">
      <a href="/20201129/rules-of-linux.html" title="Linux世界的规则"><span>下一篇&nbsp;&nbsp;</span><i class="icon icon-angle-right" aria-hidden="true"></i></a>
    </li>
    
    
    <li class="toggle-toc">
      <a class="toggle-btn collapsed" data-toggle="collapse" href="#collapseToc" aria-expanded="false" title="文章目录" role="button">
        <span style="color:#C71585">[&nbsp;</span><span style="color:#C71585">文章目录</span>
        <i class="text-collapsed icon icon-anchor"></i>
        <i class="text-in icon icon-close"></i>
        <span style="color:#C71585">]</span>
      </a>
    </li>
    
  </ul>
  
  
  
  <div class="bar-right">
    
    <div class="share-component" data-sites="weibo,qq,wechat,facebook,twitter" data-mobile-sites="weibo,wechat,qq,qzone"></div>
    
  </div>
  </div>
</nav>
  


</main>

  <script async src="//busuanzi.ibruce.info/busuanzi/2.3/busuanzi.pure.mini.js"></script>
<footer class="footer" itemscope itemtype="http://schema.org/WPFooter">
	
	
    <ul class="social-links">
    	
        <li><a href="https://github.com/hwame" target="_blank" title="Github" data-toggle=tooltip data-placement=top><i class="icon icon-github"></i></a></li>
        
        <li><a href="https://weibo.com/hwamei" target="_blank" title="Weibo" data-toggle=tooltip data-placement=top><i class="icon icon-weibo"></i></a></li>
        
        <li><a href="https://www.zhihu.com/people/hwame" target="_blank" title="Zhihu" data-toggle=tooltip data-placement=top><i class="icon icon-zhihu"></i></a></li>
        
        <li><a href="https://segmentfault.com/u/hwame" target="_blank" title="Segmentfault" data-toggle=tooltip data-placement=top><i class="icon icon-segmentfault"></i></a></li>
        
        <li><a href="https://gitee.com/hwame" target="_blank" title="Gitee" data-toggle=tooltip data-placement=top><i class="icon icon-gitee"></i></a></li>
        
        <li><a href="/atom.xml" target="_blank" title="Rss" data-toggle=tooltip data-placement=top><i class="icon icon-rss"></i></a></li>
        
    </ul>

    <div class="copyright">
    	
        &copy; 2025 鴻塵
        
        
        <div class="publishby" style="font-family:Courier">
            <span id="busuanzi_container_site_pv">
                <i class="icon icon-eye"></i><span id="busuanzi_value_site_pv" style="font-family:Courier"></span>&nbsp;
                <i class="icon icon-users"></i><span id="busuanzi_value_site_uv" style="font-family:Courier"></span>
            </span>
            <!--
            <br>✯<a target="_blank" rel="noopener" href="https://beian.miit.gov.cn/" style="color:#0FFFAA">鄂ICP备2020019329号</a>
            -->
            <br><i class="icon icon-clock" style="transform:rotate(90deg)"></i><span id="sitetime" style="font-family:Courier"></span>
        </div>
        
        <!--
        <div class="publishby">
        	Theme by <a href="https://github.com/cofess" target="_blank"> cofess </a>base on <a href="https://github.com/cofess/hexo-theme-pure" target="_blank">pure</a>.
        </div>
        -->
    </div>
    
</footer>
<script>
    function siteTime(){
        window.setTimeout("siteTime()", 1000);
        var seconds = 1000;
        var minutes = seconds * 60;
        var hours = minutes * 60;
        var days = hours * 24;
        var years = days * 365;
        var today = new Date();
        var todayYear = today.getFullYear();
        var todayMonth = today.getMonth()+1;
        var todayDate = today.getDate();
        var todayHour = today.getHours();
        var todayMinute = today.getMinutes();
        var todaySecond = today.getSeconds();
        /* Date.UTC() -- 返回date对象距世界标准时间(UTC)1970年1月1日午夜之间的毫秒数(时间戳)
        year - 作为date对象的年份，为4位年份值
        month - 0-11之间的整数，做为date对象的月份
        day - 1-31之间的整数，做为date对象的天数
        hours - 0(午夜24点)-23之间的整数，做为date对象的小时数
        minutes - 0-59之间的整数，做为date对象的分钟数
        seconds - 0-59之间的整数，做为date对象的秒数
        microseconds - 0-999之间的整数，做为date对象的毫秒数 */
        var t1 = Date.UTC(2020,05,19,21,20,52); //建站时间
        var t2 = Date.UTC(todayYear,todayMonth,todayDate,todayHour,todayMinute,todaySecond);
        var diff = t2-t1;
        var diffYears = Math.floor(diff/years);
        var diffDays = Math.floor((diff/days)-diffYears*365);
        var diffHours = Math.floor((diff-(diffYears*365+diffDays)*days)/hours);
        var diffMinutes = Math.floor((diff-(diffYears*365+diffDays)*days-diffHours*hours)/minutes);
        var diffSeconds = Math.floor((diff-(diffYears*365+diffDays)*days-diffHours*hours-diffMinutes*minutes)/seconds);
        // 将「数字」转「补零字符串」
        var y = diffYears.toString()
        var d = diffDays.toString().padStart(3, '0')
        var h = diffHours.toString().padStart(2, '0')
        var m = diffMinutes.toString().padStart(2, '0')
        var s = diffSeconds.toString().padStart(2, '0')
        document.getElementById("sitetime").innerHTML=y+":"+d+":"+h+":"+m+":"+s;
    }
    siteTime();
</script>
  <script src="//cdn.jsdelivr.net/npm/jquery@1.12.4/dist/jquery.min.js"></script>
<script>
window.jQuery || document.write('<script src="js/jquery.min.js"><\/script>')
</script>
<div id="go-top"></div>
<style type="text/css">
#go-top {
 width:40px;height:40px;
 background-color:#DDA0DD;
 position:relative;
 border-radius:20px;
 position:fixed;right:20px;bottom:50px;
 cursor:pointer;display:none;
}
#go-top:after {
 content:" ";
 position:absolute;left:14px;top:14px;
 border-top:2px solid #fff;border-right:2px solid #fff;
 width:12px;height:12px;
 transform:rotate(-45deg);
}
#go-top:hover {
 background-color:#8A2BE2;
}
</style>
<script>
$(function () {
  var top=$("#go-top");
  $(window).scroll(function () {
    ($(window).scrollTop() > 300) ? top.show(300) : top.hide(200);
    $("#go-top").click(function () {
      $('body,html').animate({scrollTop:0});
      return false();
    })
  });
});
</script>

<script src="/js/plugin.min.js"></script>


<script src="/js/application.js"></script>


    <script>
(function (window) {
    var INSIGHT_CONFIG = {
        TRANSLATION: {
            POSTS: '文章',
            PAGES: '页面',
            CATEGORIES: '分类',
            TAGS: '标签',
            UNTITLED: '(未命名)',
        },
        ROOT_URL: '/',
        CONTENT_URL: '/content.json',
    };
    window.INSIGHT_CONFIG = INSIGHT_CONFIG;
})(window);
</script>

<script src="/js/insight.js"></script>





   




   
    

  <script src='/waline.js'></script>
  <link rel="stylesheet" type="text/css" href="/waline.css" />
  
  <script type="text/javascript">
 
  
Waline.init({
      el: '#vcomments',
      serverURL: 'https://waline.hwame.top',
});
  </script>

     


<!-- 20201211添加判断 -->

   
  <script src="//cdn.jsdelivr.net/npm/@fancyapps/fancybox@latest/dist/jquery.fancybox.min.js"></script>
  <script>
  //利用 FancyBox 实现点击图片放大
  $(document).ready(function() {
    $('article img').not('[hidden]').not('.panel-body img').each(function() {
      var $image = $(this);
      var imageCaption = $image.attr('alt');
      var $imageWrapLink = $image.parent('a');
      if ($imageWrapLink.length < 1) {
        var src = this.getAttribute('src');
        var idx = src.lastIndexOf('?');
        if (idx != -1) {
          src = src.substring(0, idx);
        }
        $imageWrapLink = $image.wrap('<a href="' + src + '"></a>').parent('a');
      }
      $imageWrapLink.attr('data-fancybox', 'images');
      if (imageCaption) {
        $imageWrapLink.attr('data-caption', imageCaption);
      }
    });
    $().fancybox({
      selector: '[data-fancybox="images"]',
      hash: false,
      loop: true,
    });
  });
  </script>







  
  <style>
    .copy-btn {
      display: inline-block;
      padding: 6px 12px;
      font-size: 13px;
      font-weight: 700;
      line-height: 20px;
      color: #333;
      white-space: nowrap;
      vertical-align: middle;
      cursor: pointer;
      background-color: #eee;
      background-image: linear-gradient(#fcfcfc, #eee);
      border: 1px solid #d5d5d5;
      border-radius: 3px;
      user-select: none;
      outline: 0;
    }

    .highlight-wrap .copy-btn {
      transition: opacity .3s ease-in-out;
      opacity: 0;
      padding: 2px 6px;
      position: absolute;
      right: 4px;
      top: 8px;
      z-index: 2;
    }

    .highlight-wrap:hover .copy-btn,
        .highlight-wrap .copy-btn:focus {
      opacity: 1
    }

    .highlight-wrap {
      position: relative;
    }
  </style>
  
  <script>
    addLoadEvent(()=>{
      $('.highlight').each(function (i, e) {
        var $wrap = $('<div>').addClass('highlight-wrap')
        $(e).after($wrap)
        $wrap.append($('<button>').addClass('copy-btn').append('一键复制').on('click', function (e) {
          var code = $(this).parent().find(".code")[0].innerText
          
          var ta = document.createElement('textarea')
          document.body.appendChild(ta)
          ta.style.position = 'absolute'
          ta.style.top = '0px'
          ta.style.left = '0px'
          ta.value = code
          ta.select()
          ta.focus()
          var result = document.execCommand('copy')
          document.body.removeChild(ta)
          
            if(result)$(this).text('复制成功')
            else $(this).text('复制失败')
          
          $(this).blur()
        })).on('mouseleave', function (e) {
          var $b = $(this).find('.copy-btn')
          setTimeout(function () {
            $b.text('一键复制')
          }, 300)
        }).append(e)
      })
    })
  </script>

<script type="text/x-mathjax-config">
    MathJax.Hub.Config({
        tex2jax: {
            inlineMath: [ ["$","$"], ["\\(","\\)"] ],
            skipTags: ['script', 'noscript', 'style', 'textarea', 'pre', 'code'],
            processEscapes: true
        }
    });
    MathJax.Hub.Queue(function() {
        var all = MathJax.Hub.getAllJax();
        for (var i = 0; i < all.length; ++i)
            all[i].SourceElement().parentNode.className += ' has-jax';
    });
</script>
<script src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>
</body>
</html>